# 算法步骤

  1. 可能适用的问题:针对一组数据,给定限制值和期望值,希望从中选出一组数据,在满足限制的条件下,期望值最大
  2. 尝试能否解决问题:每次做出当前选择时,在对限制值同等贡献量下,对期望值贡献最大的数据(或者贡献相同期望值,限制值贡献最少的)
  3. 通过例子或者严谨的数学推理,证明由此产生的解是最优解

贪心算法不一定能得到最优解:比如用贪心算法,求解图中两点的最短路径,其主要原因在于,前面的选择,会影响后面的选择

# 典型问题

  1. 钱币找零:拥有不同数量的不同面额纸币,给定一个金额,如何使用尽可能少的纸币支付该金额
  2. 区间覆盖:给定一组区间的起始点和结束点,从中选出尽可能多的不相交区间
  3. 霍夫曼(Huffman)编码:统计文本中出现字符的种类和频率,频率越高的,使用越短的编码

WARNING

找零问题不一定可以使用贪婪算法:考虑币值为 100,99 和 1,每种各一百张,找 396 元。

动态规划可求出四张 99 元,但贪心算法解出需三张一百和 96 张一元

Last Updated: 7/1/2020, 2:19:02 AM